
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>谈谈 Shenandoah 和 ZGC 这两种垃圾收集器的差异 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>谈谈 Shenandoah 和 ZGC 这两种垃圾收集器的差异 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Shenandoah GC 的核心设计目标是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Shenandoah GC 的主要设计目标是减少垃圾回收的停顿时间。它通过将许多回收阶段与应用线程并发执行来实现这一目标。</div>
          </div>
          <div class="card-source">来源: Shenandoah GC</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Shenandoah GC 使用哪种核心算法，并如何管理堆内存以提高效率？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Shenandoah 使用标记-整理（Mark-Compact）算法。它将堆内存分为不同的区域，并在进行垃圾回收时逐个区域进行处理，这种区域化处理使得并发回收更高效。</div>
          </div>
          <div class="card-source">来源: Shenandoah 的关键特点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">限制</div>
          <div class="card-question">使用 Shenandoah GC 有哪些潜在的缺点或限制？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">限制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Shenandoah 的限制主要有两点：1. 可能会增加内存使用量，因为它需要额外空间支持并发整理和标记。2. 实现和调优的复杂性较高。</div>
          </div>
          <div class="card-source">来源: Shenandoah 的优势和限制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">ZGC 设计用于解决什么特定场景下的问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ZGC 设计用于减少垃圾回收的停顿时间，特别是在处理大规模堆内存（多达数十 TB）的场景中，目标是在这种环境下依然能保持低延迟。</div>
          </div>
          <div class="card-source">来源: ZGC</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">ZGC 是如何实现“非阻塞性”垃圾回收的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ZGC 通过将几乎所有回收操作（如并发标记、并发整理和并发压缩）与应用线程并行处理来实现非阻塞性。这使得即使在 GC 操作期间，应用程序线程也能继续运行。</div>
          </div>
          <div class="card-source">来源: ZGC 的关键特点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">优势</div>
          <div class="card-question">相较于其他垃圾回收器，ZGC 最突出的优势是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">优势</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ZGC 的主要优势是：1. 极低的停顿时间，通过几乎完全的并发回收实现；2. 卓越的大堆支持，能够在大规模堆内存环境中保持低延迟。</div>
          </div>
          <div class="card-source">来源: ZGC 的优势和限制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">在减少停顿时间这一共同目标上，Shenandoah 和 ZGC 的设计理念有何不同？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Shenandoah 主要关注于通过并发处理和区域化回收来“减少”GC停顿时间。而 ZGC 的目标更为极致，它追求“几乎零停顿”，通过高并发和非阻塞性设计来实现。</div>
          </div>
          <div class="card-source">来源: Shenandoah 和 ZGC 的差异</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">从实现细节上看，Shenandoah 和 ZGC 的垃圾回收方式有何区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Shenandoah 使用标记-整理算法，并在各个区域逐步进行回收和整理。而 ZGC 使用并发标记和整理，能够在极大的堆内存中保持低延迟，并支持更多现代技术。</div>
          </div>
          <div class="card-source">来源: Shenandoah 和 ZGC 的差异</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">对比</div>
          <div class="card-question">在大型堆内存环境下，Shenandoah 和 ZGC 在性能和资源消耗上有什么不同表现？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在大型堆内存环境中，Shenandoah 可能会增加内存使用量。相比之下，ZGC 在大堆内存环境中表现优异，几乎不增加停顿时间。</div>
          </div>
          <div class="card-source">来源: Shenandoah 和 ZGC 的差异</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
